/**
 * 通用js方法封装处理
 * Copyright (c) 2018 jallyzhang
 */
(function ($) {
    $.extend({
		table: {
			_option: {},
			isTree:function(){
				return $.table._option.is_tree ? true : false;
			},
			init: function(options) {
				$.table._option = options;
				_showSearch = $.common.isEmpty(options.showSearch) ? true : options.showSearch;
				_showRefresh = $.common.isEmpty(options.showRefresh) ? true : options.showRefresh;
				_showColumn = $.common.isEmpty(options.showColumn) ? true : options.showColumn;
				_onOpen = function(){
					var btns = $('<div data-toggle="buttons" class="btn-group btn-overlap btn-corner pull-right"></div>');
					if(_showSearch){
						$('<a class="btn btn-white btn-xs" data-toggle="button" title="隐藏/显示收缩">' +
							'<i class="fa fa-search bigger-110 icon-only"></i></a>').on("click",function(){
								$(".search-collapse").slideToggle();
						}).appendTo(btns); 
					}
					if(_showRefresh){
						$('<a class="btn btn-white btn-xs" title="刷新数据">' +
							'<i class="fa fa-refresh bigger-110 icon-only"></i></a>').on("click",function(){
								$.table.refresh();
						}).appendTo(btns);
					}
					if(_showColumn){
						$('<a class="btn btn-white btn-xs" title="隐藏/显示列">' +
							'<i class="fa fa-table bigger-110 icon-only"></i></a>').on("click",function(e){
								$.table.showColumn(e);
						}).appendTo(btns);
					}
					btns.appendTo("#toolbar");
				},
				_onTableCheckChange = function(){
					var checked = $.table.getCheckedValues();
					$('#toolbar .btn-del').toggleClass('disabled', !checked.length);
					$('#toolbar .btn-edit').toggleClass('disabled', checked.length!=1);
					if($.table._option.onCheck && typeof($.table._option.onCheck) == 'function'){
						$.table._option.onCheck();
					}
					if($.table._option.onUncheck && typeof($.table._option.onUncheck) == 'function'){
						$.table._option.onUncheck();
					}
					if($.table._option.onCheckAll && typeof($.table._option.onCheckAll) == 'function'){
						$.table._option.onCheckAll();
					}
					if($.table._option.onUncheckAll && typeof($.table._option.onUncheckAll) == 'function'){
						$.table._option.onUncheckAll();
					}
					if($.table._option.onCheckNode && typeof($.table._option.onCheckNode) == 'function'){
						$.table._option.onCheckNode();
					}
				},
				_default_options = {
					url:options.url,
					toolbar:'#toolbar',
					pageList:[20,40,80,120],
					pageSize:20,
					minHeight:400,
					fitColumns:true,
					onOpen:_onOpen,
					onCheck:_onTableCheckChange,
					onUncheck:_onTableCheckChange,
					onCheckAll:_onTableCheckChange,
					onUncheckAll:_onTableCheckChange,
					onLoadSuccess:function(data){
						// 如果页面出现滚动条的话，重新设置表格大小，否则表格页面会出现一点点bug
						if(document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight)){
							$('#ey_grid').datagrid("resize",{
								width:'100%'
							})
						}
						if($.table._option.onLoadSuccess){
							$.table._option.onLoadSuccess(data);
						}
					}
				};
				if(!$.table.isTree()){
					$.extend(_default_options,{
						checkOnSelect:false,
						striped:true,
						pagination:true
					});
					$('#ey_grid').datagrid(_default_options);
				}else{
					$.extend(_default_options,{
						idField: options.idField || 'id',    
					    treeField: options.treeField,
						checkbox: options.checkbox || false
					});
					$('#ey_grid').treegrid(_default_options);
				}
			},
			showColumn:function(event){
				var state = $('#ey_grid').data('datagrid');
				if (!state.columnMenu){ 
					state.columnMenu = $('<div></div>').appendTo('body');
					state.columnMenu.menu({
	                    onClick: function(item){
	                        if (item.iconCls == 'tree-checkbox1'){
	                            $('#ey_grid').datagrid('hideColumn', item.name);
	                            $(this).menu('setIcon', {
	                                target: item.target,
	                                iconCls: 'tree-checkbox0'
	                            });
	                        } else {
	                            $('#ey_grid').datagrid('showColumn', item.name);
	                            $(this).menu('setIcon', {
	                                target: item.target,
	                                iconCls: 'tree-checkbox1'
	                            });
	                        }
	                    }
	                });
	                var fields = $('#ey_grid').datagrid('getColumnFields',true).concat($('#ey_grid').datagrid('getColumnFields',false));
	                for(var i=0; i<fields.length; i++){
	                    var field = fields[i];
	                    var col = $('#ey_grid').datagrid('getColumnOption', field);
	                    if(col.checkbox) continue;
	                    state.columnMenu.menu('appendItem', {
	                        text: col.title,
	                        name: field,
	                        iconCls: col.hidden ? 'tree-checkbox0' : 'tree-checkbox1'
	                    });
	                }
                }
                state.columnMenu.menu('show', {
                        left:event.pageX,
                        top:event.pageY
                    });
			},
			// 刷新表格，可以使用新的链接，不填url表示使用之前的链接，此刷新将从第一页开始
			refresh: function(url,params){
				if($.common.isNotEmpty(url)){
					if($.table.isTree()){
						$("#ey_grid").treegrid("options").url = url; // 使用之前的链接
					}else{
						$("#ey_grid").datagrid("options").url = url; // 使用之前的链接
					}
				}
				if($.table.isTree()){
					$("#ey_grid").treegrid("load",params);
				}else{
					$("#ey_grid").datagrid("load",params);
				}
			},
			// 获取选中行，某个列的值，返回集合，默认为id
			getCheckedValues:function(col){
				col = col || "id";
				var cks = $('#ey_grid').datagrid('getChecked');
				return $.map(cks, function (row) {
        	        return row[col];
        	    });
			},
			// 点击表格上面的查询按钮，提交查询表单
			search:function(formId){
				formId = formId || "sff";
				var json = $.form.serializeObject(formId) || {};
				$.table.refresh(null,json);
			},
			// 添加信息弹出框
            add: function() {
                $.modal.open({
                	title:"添加" + $.table._option.modalName, 
                	url:$.table._option.add_url,
                	onSubmit:function(){
                		// 如果页面中有clickSubmit，执行页面中的clickSubmit，不会执行默认的submit
                    	if(typeof clickSubmit != 'undefined' && clickSubmit instanceof Function){ 
                    		clickSubmit();
                    		return;
                    	}
                    	$.table.submit();
                	}
                });
            },
            // 修改信息弹出框
            edit: function(id) {
            	id = id || $.table.getCheckedValues()[0];
            	if($.common.isEmpty(id)){
            		$.alert.warn("请选择一条记录！");
        			return;
            	}
            	$.modal.open({
            		title:"修改" + $.table._option.modalName, 
            		url:$.table._option.edit_url.replace("{id}", id),
            		onSubmit:function(){
            			// 如果页面中有clickSubmit，执行页面中的clickSubmit，不会执行默认的submit
            			if(typeof clickSubmit != 'undefined' && clickSubmit instanceof Function){ // 如果页面中有clickSubmit，执行页面中的clickSubmit，不会执行默认的submit
                    		clickSubmit();
                    		return;
                    	}
                		$.table.submit();
                	}
            	});
            },
            // 点击导出按钮
            export: function(){
            	$.alert.confirm("最多只能导出5万条数据，确认导出？",function(){
					var json = $.form.serializeObject() || {};
            		$.common.wpost($.table._option.export_url,json,true);
            	});
            },
            // table上面表格默认提交方式
            submit: function(){
            	var url = $("#ff").attr("save_url");
            	if($.form.isEditing()){ // 默认检查表单中id属性是否有值
            		url = $("#ff").attr("update_url");
            	}
            	$.form.submit({
            		url:url,
            		success: function(result){
            			if (result.state == web_status.SUCCESS) {
            				$.modal.close();
                        	$.table.refresh();
                        } else {
                            $.alert.error(result.msg || "操作失败！");
                        }
            		}
            	});
            },
            // 批量删除信息
            removeAll: function() {
        		var rows = $.table.getCheckedValues();
        		if (rows.length == 0) {
        			$.alert.warn("请至少选择一条记录！");
        			return;
        		}
        		$.alert.confirm("确认要删除选中的" + rows.length + "条数据吗？", function() {
        			var url = $.table._option.delete_url;
        			var data = { "ids": rows.join() };
        			$.post(url,data,function(result){
        				if (result.state == web_status.SUCCESS) {
        					$.table.refresh();
                        } else {
                            $.alert.error(result.msg || "操作失败！");
                        }
					});
        		});
            }
		},
		// 表单方法	    
		form: {
			submit:function(options){
				var $f = $("#" + (options.form_id || "ff"));
				$f.form('submit',{
					url:options.url || $f.attr("action"),
					ajax:true,
					queryParams:options.queryParams || {},
					onSubmit: function(){
						var isValid = $(this).form('validate');
						return isValid;
					},
					success: function(data){
						var result = $.parseJSON(data);
						// 调用客户端方法
						if(options.success){
							options.success(result);
						}
					}
				});
			},
			reset: function(formId) {
				var $f = $("#" + (formId || "sff"));
				$f[0].reset();
			},
			serializeObject:function(formId){
				var json = {};
				$.each($("#" + (formId || "sff")).serializeArray(), function() {
					var item = this;
					if (json[item["name"]]) {
					    json[item["name"]] = json[item["name"]] + "," + item["value"];
					} else {
					    json[item["name"]] = item["value"];
					}
				});
				return json;    
			},
			// 页面是否处于编辑状态
            isEditing:function(input_id){
            	return $.common.isNotEmpty($("#"+(input_id || "tid")).val());
            }
		},
		// 操作封装处理
		operate: {
			
		},
    	// alert框
    	alert: {
    		// 弹出提示
            msg: function(content, type) {
        	    $.messager.alert('系统提示',content,type||"");
            },
    		// 错误提示
            error: function(content) {
            	$.alert.msg(content, modal_status.FAIL);
            },
            // 成功提示
            success: function(content) {
            	$.alert.msg(content, modal_status.INFO);
            },
            // 警告提示
            warn: function(content) {
            	$.alert.msg(content, modal_status.WARNING);
            },
			confirm:function(content,callback){
				$.messager.confirm('系统提示', content, function(r){
					if(r){callback()}
				});
			}
		},
		// 弹出层封装处理
		modal: {
			// 弹出框option和点击确定按钮触发方法
			open: function (options) {
				$('#dlg').dialog({    
				    title: options.title || "",    
				    width: options.width || 800,    
				    height: options.height || ($(window).height() - 100),    
				    href: options.url,
				    onLoad:options.onLoad || function(){},
				    onOpen:options.onOpen || function(){},
				    closed: false,    
				    cache: false,
				    shadow:false,    
				    modal: true,
				    buttons: [{
			            text:'确定',
			            iconCls:'icon-ok',
			            handler:options.onSubmit || function(){}
			        },{
			            text:'关闭',
			            handler:function(){
			            	$.modal.close()
			            }
			        }]
				});
			},
			close:function(){
				if($('#dlg').length > 0){
					$('#dlg').dialog('close').dialog("clear");
				}
			}
		},
        // 通用方法封装处理
    	common: {
    		// 判断字符串是否为空
            isEmpty: function (val) {
                if (val == null || typeof(val) == "undefined" || (typeof(val) == "string" && val == "" && val != "undefined")){
                    return true;
                }
                return false;
            },
            // 判断一个字符串是否为非空串
            isNotEmpty: function (value) {
            	return !$.common.isEmpty(value);
            },
            // 是否显示数据 为空默认为显示
            visible: function (value) {
                if ($.common.isEmpty(value) || value == true) {
                    return true;
                }
                return false;
            },
            // 空格截取
            trim: function (value) {
                if (value == null) {
                    return "";
                }
                return value.toString().replace(/(^\s*)|(\s*$)|\r|\n/g, "");
            },
            // 指定随机数返回
            random: function (min, max) {
                return Math.floor((Math.random() * max) + min);
            },
            startWith: function(value, start) {
                var reg = new RegExp("^" + start);
                return reg.test(value)
            },
            endWith: function(value, end) {
                var reg = new RegExp(end + "$");
                return reg.test(value)
            },
            // 删除text中指定的c串
			remove:function(text,c){
				if(text==null ||  text.length <=0 ){
					return text;
				}else{
					return text.replace(c,"");
				}
			},
			// 删除text中末尾的c
			removeEnd:function(text,c){
				if(text==null ||  text.length <=0 || text.indexOf(c) < 0){
					return text;
				}else{
					return text.substring(0, text.length - c.length);
				}
			},
			// 删除text中头部的c
			removeStart:function(text,c){
				if(text==null ||  text.length <=0 || text.indexOf(c) < 0){
					return text;
				}else{
					return text.substring(c.length,text.length);
				}
			},
            // 发送一个post提交，新打开一个窗口
		    wpost:function(url,params,open){
				var form = $("<form></form>");
				form.attr('action',url).attr('method','post');
				if(open){
					form.attr('target','_blank');
				}
				// 存在params，并且params是一个json
				if(params && jQuery.isPlainObject(params)){
					$.each(params,function(i,n){
						var input = $("<input type='hidden' name='"+i+"' value='"+n+"' />");
						form.append(input);
					});
				}
				form.appendTo("body");
				form.submit();
				form.remove();
			},
            // 将秒转为yyyy-MM-dd hh:mm:ss
            time:function(value,pattern){
				var date = new Date(value * 1000);
				var p = pattern ? pattern : "yyyy-MM-dd hh:mm:ss";
				return date.pattern(p);
			}
        }
    });
    
    // var date = new Date();
	// date.pattern("yyyy-MM-dd hh:mm:ss")
	Date.prototype.pattern=function(fmt) {  
		if(this == 'Invalid Date'){
			return '';
		}
	    var o = {         
		    "M+" : this.getMonth()+1, //月份         
		    "d+" : this.getDate(), //日         
		    "h+" : this.getHours(), //小时         
		    "H+" : this.getHours(), //小时         
		    "m+" : this.getMinutes(), //分         
		    "s+" : this.getSeconds(), //秒         
		    "q+" : Math.floor((this.getMonth()+3)/3), //季度         
		    "S" : this.getMilliseconds() //毫秒         
	    };         
	    var week = {         
		    "0" : "/u65e5",         
		    "1" : "/u4e00",         
		    "2" : "/u4e8c",         
		    "3" : "/u4e09",         
		    "4" : "/u56db",         
		    "5" : "/u4e94",         
		    "6" : "/u516d"        
	    };         
	    if(/(y+)/.test(fmt)){         
	        fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));         
	    }         
	    if(/(E+)/.test(fmt)){         
	        fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "/u661f/u671f" : "/u5468") : "")+week[this.getDay()+""]);         
	    }         
	    for(var k in o){         
	        if(new RegExp("("+ k +")").test(fmt)){         
	            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));         
	        }         
	    }         
	    return fmt;         
	}
})(jQuery);

/** 消息状态码 */
web_status = {
    SUCCESS: 'ok',
    FAIL: 'fail'
};

/** 弹窗状态码 */
modal_status = {
    SUCCESS: "success",
    FAIL: "error",
    INFO: "info",
    WARNING: "warning"
};
